package com.bitoon.basketdudes.web.xhr;

import com.bitoon.basketdudes.web.BaseAction;
import com.bitoon.basketdudes.web.datos.InfoCabeceraXHR;
import com.bitoon.basketdudes.web.jpa.Jugador;
import com.bitoon.basketdudes.web.jpa.Equipo;
import com.bitoon.basketdudes.web.jpa.RopaJugador;
import com.bitoon.web.utils.LocalizedText;

import java.util.*;
import javax.persistence.*;
import org.apache.log4j.Logger;

public class CaracteristicaJugador extends BaseAction {
    
    private String equipo;
    private String jugador;
    private InfoCabeceraXHR cabecera;
    private Jugador datosJugador;

    private Logger log = Logger.getLogger(CaracteristicaJugador.class);
    private Map<String,Integer> mapaModelos = new HashMap();

    public String execute() {
        String retorno = SUCCESS;

        inicializarMapa();

        EntityManager em = null;
        cabecera = new InfoCabeceraXHR();

        try {
            int idModelo = mapaModelos.get(jugador);

            em = emfBasket.createEntityManager(); // checked (!!!)
            Query q = em.createNamedQuery("Equipo.findByNombreUrl");
            equipo = equipo.replace("_","&");
            q.setParameter("nombre", equipo);

            Equipo equipo = (Equipo)q.getSingleResult();

            log.debug("equipo id: " + equipo.getId());

            q = em.createNamedQuery("Jugador.findByEquipoIdModeloId");
            q.setParameter("equipoId", equipo.getId());
            q.setParameter("mJugadorId", idModelo);
            Jugador j = (Jugador)q.getSingleResult();
            log.debug("j: " + j);
            log.debug("mjugador: " + j.getMJugador());

            setDatosJugador(j);
            
            cabecera.setCorrecto(1);
        } catch (NoResultException nre) {
            log.debug("No se ha encontrado el jugador " + jugador + " del equipo " + equipo);
            retorno = NOT_FOUND;
        } catch (Exception e) {
            log.error("Error", e);
            cabecera.setCorrecto(0);
        } finally {
            //try { em.close(); } catch (Exception e) { }
        }

        return retorno;
    }

    public void inicializarMapa() {
        getMapaModelos().put("black-shogun",1);
        getMapaModelos().put("buddhas-palm",2);
        getMapaModelos().put("kong",3);
        getMapaModelos().put("tetsubo",4);
        getMapaModelos().put("white-tiger",5);
        getMapaModelos().put("casanova",6);
        getMapaModelos().put("magicroissant",7);
        getMapaModelos().put("scope",8);
        getMapaModelos().put("swamp",9);
        getMapaModelos().put("the-man",10);
        getMapaModelos().put("el-muro",11);
        getMapaModelos().put("golem",12);
        getMapaModelos().put("iceberg",13);
        getMapaModelos().put("yeti",14);
        getMapaModelos().put("bomba",15);
        getMapaModelos().put("diamond",16);
        getMapaModelos().put("fireball",17);
        getMapaModelos().put("irish-devil",18);
        getMapaModelos().put("golden-boy",19);
        getMapaModelos().put("namloc",20);
        getMapaModelos().put("redcap",21);
        getMapaModelos().put("sonic-blast",22);
        getMapaModelos().put("el-duque",23);
        getMapaModelos().put("fisherman",24);
        getMapaModelos().put("ohm",25);
        getMapaModelos().put("profesor",26);
        getMapaModelos().put("tesla",27);
        getMapaModelos().put("frankestein",28);
        getMapaModelos().put("beluga",29);
        getMapaModelos().put("speedy-parker",30);
        getMapaModelos().put("raingod",31);
        getMapaModelos().put("bad-dog",32);
        getMapaModelos().put("snag",33);
        getMapaModelos().put("big-onigiri",34);
        getMapaModelos().put("champion",35);
        getMapaModelos().put("machine-gun",36);
        getMapaModelos().put("atila",37);
        getMapaModelos().put("bull",38);
        getMapaModelos().put("the-engineer",39);
        getMapaModelos().put("graffiti",40);
        getMapaModelos().put("jack-lee",41);
        getMapaModelos().put("diablo",42);
        getMapaModelos().put("mastil",43);
        getMapaModelos().put("quartermaster",44);
        getMapaModelos().put("scary",45);
        getMapaModelos().put("rocket",46);
        getMapaModelos().put("apache",47);
        getMapaModelos().put("matarife",48);
        getMapaModelos().put("reaper",49);
        getMapaModelos().put("the-boss",50);
        getMapaModelos().put("shaolin",51);
        getMapaModelos().put("volcano",52);
        getMapaModelos().put("octopus",53);
        getMapaModelos().put("big-bob",54);
        getMapaModelos().put("racatun",55);
        getMapaModelos().put("spartan",56);
        getMapaModelos().put("tall-tom",57);
        getMapaModelos().put("gimmick",58);
    }

    public String getEquipo() {
        return equipo;
    }

    public void setEquipo(String equipo) {
        this.equipo = equipo;
    }

    public String getJugador() {
        return jugador;
    }

    public void setJugador(String jugador) {
        this.jugador = jugador;
    }

    public Map<String, Integer> getMapaModelos() {
        return mapaModelos;
    }

    public void setMapaModelos(Map<String, Integer> mapaModelos) {
        this.mapaModelos = mapaModelos;
    }

    public InfoCabeceraXHR getCabecera() {
        return cabecera;
    }

    public void setCabecera(InfoCabeceraXHR cabecera) {
        this.cabecera = cabecera;
    }

    public Jugador getDatosJugador() {
        return datosJugador;
    }

    public void setDatosJugador(Jugador datosJugador) {
        this.datosJugador = datosJugador;
    }

    public List<RopaJugador> getRopaJugador(int idJugador) {
        List<RopaJugador> retorno = null;

        EntityManager em = null;

        try {

            em = emfBasket.createEntityManager(); // checked
            Query q = em.createNamedQuery("RopaJugador.findByJugadorId");
            q.setParameter("jugadorId", idJugador);

            retorno = (List<RopaJugador>)q.getResultList();
        } catch (NoResultException nre) {
            log.error("[getRopaJugador] No se ha encontrado registro para valores (idJugador=" + idJugador + ")");
        } catch (Exception e) {
            log.error("[getRopaJugador]: " + e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }


        return retorno;
    }

    public String getTextoObjeto(String tipo, String key) {
        
        String retorno = "xx-xx";

        log.debug("pidiendo texto objeto: " + tipo + "," + key);

        if (tipo.equals("tipo")) {
            retorno = LocalizedText.getInstance().getTipoObjeto(idioma, key);
        } else if (tipo.equals("nombre")) {
            retorno = LocalizedText.getInstance().getNombreObjeto(idioma, key);
        } else if (tipo.equals("descripcion")) {
            retorno = LocalizedText.getInstance().getDescripcionObjeto(idioma, key);
        } else if (tipo.equals("caracteristica")) {
            retorno = LocalizedText.getInstance().getNombreCaracteristica(idioma, key);
        }

        return retorno;
        
    }

    public String getTextoTalento(String tipo, String key) {

        String retorno = "";

        if (tipo.equals("nombre")) {
            retorno = LocalizedText.getInstance().getNombreTalento(idioma, key);
        } else if (tipo.equals("descripcion")) {
            retorno = LocalizedText.getInstance().getDescripcionTalento(idioma, key);
        }

        return retorno;
    }

}
